package forloop

import "fmt"

func TestForLoop() {
	//和 C 语言的 for 一样：
	//for init; condition; post { }。 对1-10求和
	sum := 0
	for num := 1; num <= 10; num++ {
		sum += num
	}
	fmt.Println("1-10 sum :", sum)

	//死循环
	//和 C 的 for(;;) 一样：
	//for ;; {
	//	fmt.Println("死循环")
	//}
	//或者
	//for {
	//	fmt.Println("Hello")
	//}

	//和 C 的 while 一样：
	//for condition { }
	i := 0
	for i < 10 {
		fmt.Println("hello")
		i++
	}

	//或者
	for ; i < 10; {
		fmt.Println("你好")
		i++
	}

}

func TestForLoopByRange() {

	//字符串
	str := "hello, 慕课网"
	for i, s := range str {
		//fmt.Println(i, s)  //这样打印的是字符的ascii编码
		//fmt.Printf("位置：%d, 字符：%c\n", i, s)
		fmt.Println(i, string(s))  //强转
	}

	//切片
	strings := []string{"bobby", "imooc"}
	for i, s := range strings {
		fmt.Println(i, s)
	}

	//数组
	numbers := [6]int{1, 2, 3, 5}
	for i, x := range numbers {
		fmt.Printf("第 %d 位 x 的值 = %d\n", i, x)
	}
}


func TestZh(){
	//中文处理
	name := "慕课网"
	fmt.Println(name[0])
	fmt.Println(string(name[0]))
	fmt.Printf("%c\n", name[0])

	for i, s := range name {
		fmt.Println(i, s)
		fmt.Println(i, string(s))
	}

	//go语言中，字符串的处理，最好先转化成rune切片做处理
	nameSlice := []rune(name)
	fmt.Println(string(nameSlice[0]))

	//取len(name)得到的是字节的长度，是不对的
	for i:=0;i<len(nameSlice);i++{
		fmt.Printf("%c\n",nameSlice[i])
	}

	//在做字符串遍历的时候，要尽量使用range，使用for循环，要转化为rune切片，并需要强制转换
}
